import {
	API
} from '@/config/index'
import {
	refreshToken
} from '@/utils/auth.js' // 导入 refreshToken 方法


const request = {}
// 定义一个常量表示 token 何时算作即将过期
const TOKEN_EXPIRY_THRESHOLD = 60 * 60 * 1000 // 1小时
const headers = {}

request.globalRequest = async (url, method, data) => {
	if (!data) {
		data = {}
	}

	let token = uni.getStorageSync('token');
	if (token) {
		const expiresAt = token.expiresAt; // 读取过期时间
		const currentTime = Date.now();
		// 检查 token 是否即将过期
		if ((Date.parse(expiresAt) - currentTime) < TOKEN_EXPIRY_THRESHOLD) {
			// 刷新 token
			// console.log('要过期')
			token = await refreshToken();
			// console.log(token,' request')
			if (token) {
				// 更新 localStorage 中的 token(包含过期时间 是个对象)
				uni.setStorageSync('token', token)
			} else {
				throw new Error('Failed to refresh token');
			}
		}

		headers['Authorization'] = token.token; //'Bearer ' + 
		headers['Content-Type'] = 'application/json'
	}

	// 处理下API + url拼接后有可能会有两个/的问题
	const apiUrl = API + url;
	const protocolEnd = apiUrl.indexOf('://') + '://'.length;

	// 如果URL中没有协议部分，则不进行任何处理  
	if (protocolEnd === -1 + '://'.length) {
		return apiUrl;
	}
	// 对协议部分后面的URL进行替换，移除多余的连续斜杠  
	const cleanedPath = apiUrl.slice(protocolEnd).replace(/\/+/g, '/');

	// 重新组合URL  
	let apiFormatedUrl = apiUrl.slice(0, protocolEnd) + cleanedPath;

	// console.log(headers)
	return new Promise((resolve, reject) => {
		// console.log(apiFormatedUrl)
		uni.request({
			url: apiFormatedUrl,
			method: method,
			data: data,
			sslVerify: false,
			dataType: 'json',
			header: headers,
			timeout: 5 * 1000
		}).then(res => {
			// console.log(res)
			res = res.data
			if (res.status && res.status === 200) {
				resolve(res)
			}
			// else if (new_data.code && new_data.code == 1018) {
			// 	uni.showToast({
			// 		title: '登录状态已过期',
			// 		duration: 1000
			// 	});
			// 	setTimeout(function() {
			// 		uni.navigateTo({
			// 			url: "/pages/login/login"
			// 		})
			// 	}, 1000)
			// } else if (new_data.code && new_data.code == 1021) {
			// 	uni.showToast({
			// 		title: new_data.msg,
			// 		duration: 1000
			// 	});
			// } 
			else {
				// uni.showToast({
				// 	title: new_data,
				// 	icon: 'none',
				// 	duration: 3 * 1000
				// })
				reject(res || '网络故障，请重试!')
			}

		}).catch(res => {
			uni.showModal({
				title: '提示',
				content: '网络故障，请重试',
				showCancel: false
			})
			reject(res || '网络故障，请重试.')
		})
	})
}
export default request